/**
 * 智慧小区管理系统 - 角色管理API接口
 * @author Wu.Liang
 * @date 2024-01-01
 * @updated 2024-12-21 - 完善角色管理API接口
 */
import api from './request'

// 角色信息接口
export interface RoleInfo {
    id: number
    roleCode: string
    roleName: string
    description?: string
    roleType?: number
    dataScope?: number
    status: number
    sortOrder: number
    isSystem?: number
    createTime: string
    updateTime: string
    remark?: string
}

// 角色列表查询参数
export interface RoleListParams {
    current: number
    size: number
    roleName?: string | undefined
    roleCode?: string | undefined
    roleType?: number | undefined
    status?: number | undefined
    sortField?: string | undefined
    sortOrder?: string | undefined
}

// 角色列表响应
export interface RoleListResponse {
    records: RoleInfo[]
    total: number
    current: number
    size: number
    pages: number
}

// 角色表单数据
export interface RoleFormData {
    id?: number
    roleCode: string
    roleName: string
    description?: string
    roleType: number
    dataScope?: number
    status?: number
    sortOrder?: number
    remark?: string
}

// 权限树节点
export interface PermissionTree {
    id: number
    parentId?: number
    permissionCode: string
    permissionName: string
    permissionType: number
    permissionPath?: string
    permissionUrl?: string
    icon?: string
    path?: string
    type?: number
    description?: string
    status: number
    sortOrder: number
    sort?: number
    children?: PermissionTree[]
}

// 权限统计信息
export interface PermissionStatistics {
    totalPermissions: number
    menuPermissions: number
    enabledPermissions: number
    disabledPermissions: number
}

/**
 * 获取角色列表
 * @param params 查询参数
 * @returns 角色列表
 */
export const getRoleList = (params: RoleListParams): Promise<{ data: RoleListResponse }> => {
    return api.get('/api/user/roles/page', { params })
}

/**
 * 获取启用角色列表
 * @returns 启用角色列表
 */
export const getEnabledRoles = (): Promise<{ data: RoleInfo[] }> => {
    return api.get('/api/user/roles/enabled')
}

/**
 * 根据ID获取角色详情
 * @param id 角色ID
 * @returns 角色详情
 */
export const getRoleById = (id: number): Promise<{ data: RoleInfo }> => {
    return api.get(`/api/user/roles/${id}`)
}

/**
 * 获取角色详情
 * @param id 角色ID
 * @returns 角色详情
 */
export const getRoleDetail = (id: number): Promise<{ data: RoleInfo }> => {
    return api.get(`/api/user/roles/${id}`)
}

// 创建角色API已移除 - 角色由系统预设，不允许手动创建
// /**
//  * 创建角色
//  * @param data 角色数据
//  * @returns 创建结果
//  */
// export const createRole = (data: RoleFormData): Promise<{ data: boolean }> => {
//     return api.post('/api/user/roles', data)
// }

/**
 * 更新角色
 * @param id 角色ID
 * @param data 角色数据
 * @returns 更新结果
 */
export const updateRole = (id: number, data: Partial<RoleFormData>): Promise<{ data: boolean }> => {
    return api.put(`/api/user/roles/${id}`, data)
}

/**
 * 删除角色
 * @param id 角色ID
 * @returns 删除结果
 */
export const deleteRole = (id: number): Promise<{ data: boolean }> => {
    return api.delete(`/api/user/roles/${id}`)
}

/**
 * 批量删除角色
 * @param ids 角色ID列表
 * @returns 删除结果
 */
export const batchDeleteRoles = (ids: number[]): Promise<{ data: boolean }> => {
    return api.delete('/api/user/roles/batch', { params: { ids: ids.join(',') } })
}

/**
 * 为角色分配权限
 * @param id 角色ID
 * @param permissionIds 权限ID列表
 * @returns 分配结果
 */
export const assignRolePermissions = (id: number, permissionIds: number[]): Promise<{ data: boolean }> => {
    return api.post(`/api/user/roles/${id}/permissions`, permissionIds)
}

/**
 * 获取角色权限列表
 * @param id 角色ID
 * @returns 权限ID列表
 */
export const getRolePermissions = (id: number): Promise<{ data: number[] }> => {
    return api.get(`/api/user/roles/${id}/permissions`)
}

/**
 * 检查角色编码是否可用
 * @param roleCode 角色编码
 * @param id 角色ID（更新时排除自己）
 * @returns 是否可用
 */
export const checkRoleCode = (roleCode: string, id?: number): Promise<{ data: boolean }> => {
    return api.get('/api/user/roles/check-code', { params: { roleCode, excludeId: id } })
}

/**
 * 根据用户ID获取角色列表
 * @param userId 用户ID
 * @returns 角色列表
 */
export const getRolesByUserId = (userId: number): Promise<{ data: RoleInfo[] }> => {
    return api.get(`/api/user/roles/user/${userId}`)
}

/**
 * 获取权限树
 * @param type 权限类型
 * @param status 权限状态
 * @returns 权限树
 */
export const getPermissionTree = (type?: number, status?: number): Promise<{ data: PermissionTree[] }> => {
    return api.get('/api/user/permissions/tree', { params: { type, status } })
}

/**
 * 获取完整的权限树（用于权限分配）
 * @param status 权限状态：0-禁用，1-启用，null-全部
 * @returns 完整的权限树
 */
export const getCompletePermissionTree = (status?: number): Promise<{ data: PermissionTree[] }> => {
    return api.get('/api/user/permissions/complete-tree', { params: { status } })
}

/**
 * 获取权限列表
 * @param params 查询参数
 * @returns 权限列表
 */
export const getPermissionList = (params: any): Promise<any> => {
    return api.get('/api/user/permissions', { params })
}

/**
 * 获取权限统计信息
 * @returns 权限统计信息
 */
export const getPermissionStatistics = (): Promise<{ data: PermissionStatistics }> => {
    return api.get('/api/user/permissions/statistics')
}

/**
 * 获取启用的菜单权限
 * @returns 启用的菜单权限
 */
export const getEnabledMenus = (): Promise<{ data: PermissionTree[] }> => {
    return api.get('/api/user/permissions/menus/enabled')
}

/**
 * 根据角色ID获取权限列表
 * @param roleId 角色ID
 * @returns 权限列表
 */
export const getPermissionsByRoleId = (roleId: number): Promise<{ data: any[] }> => {
    return api.get(`/api/user/permissions/role/${roleId}`)
}

/**
 * 根据用户ID获取权限列表
 * @param userId 用户ID
 * @returns 权限列表
 */
export const getPermissionsByUserId = (userId: number): Promise<{ data: any[] }> => {
    return api.get(`/api/user/permissions/user/${userId}`)
}

/**
 * 获取用户菜单
 * @param userId 用户ID
 * @returns 用户菜单
 */
export const getUserMenus = (userId: number): Promise<{ data: PermissionTree[] }> => {
    return api.get(`/api/user/permissions/user/${userId}/menus`)
} 